package com.lanou.quanttradedata.stock.config;

import com.lanou.quanttradedata.stock.job.BiasCalculateToHDFSJob;
import com.lanou.quanttradedata.stock.job.StockBasicInfoJob;
import com.lanou.quanttradedata.stock.job.StockDailyInfoJob;
import com.lanou.quanttradedata.stock.job.StockDailyInfoToHDFSJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfig {
    //股票基本信息的 任务详情创建 及 触发器创建
    @Bean
    public JobDetail getStockBasicInfoJob(){
        return JobBuilder.newJob(StockBasicInfoJob.class).storeDurably().build();
    }
    @Bean
    public Trigger getStockBasicInfoJobTrigger(JobDetail getStockBasicInfoJob){
        //1、编写cron表达式，指定触发的时间和周期
        //开发执行： 每个工作日的晚上22点
        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 22 ? * MON-FRI");
        //2、构建触发器，执行任务
        return TriggerBuilder.newTrigger().forJob(getStockBasicInfoJob).withSchedule(cron).build();
        //测试时才打开，立刻执行一次
//        return TriggerBuilder.newTrigger().forJob(getStockBasicInfoJob).startNow().build();
    }

    //A股日线行情基本信息到数据库 任务详情创建 及 触发器创建
    @Bean
    public JobDetail getStockDailyInfoJob(){
        return JobBuilder.newJob(StockDailyInfoJob.class).storeDurably().build();
    }
    @Bean
    public Trigger getStockDailyInfoJobTrigger(JobDetail getStockDailyInfoJob){
        //1、编写cron表达式，指定触发的时间和周期
        //开发执行： 每个工作日的晚上22点
        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 22 ? * MON-FRI");
        //2、构建触发器，执行任务
        return TriggerBuilder.newTrigger().forJob(getStockDailyInfoJob).withSchedule(cron).build();
        //测试时才打开，立刻执行一次
//        return TriggerBuilder.newTrigger().forJob(getStockDailyInfoJob).startNow().build();
    }

    //A股日线行情基本信息CSV化到HDFS上 任务详情创建 及 触发器创建

    @Bean
    public JobDetail getStockDailyInfoToHDFSJob(){
        return JobBuilder.newJob(StockDailyInfoToHDFSJob.class).storeDurably().build();
    }
    @Bean
    public Trigger getStockDailyInfoToHDFSJobTrigger(JobDetail getStockDailyInfoToHDFSJob){
        //1、编写cron表达式，指定触发的时间和周期
        //开发执行： 每个工作日的晚上23点
        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 0 23 ? * MON-FRI");
        //2、构建触发器，执行任务
//        return TriggerBuilder.newTrigger().forJob(getStockDailyInfoToHDFSJob).withSchedule(cron).build();

        //测试时才打开，立刻执行一次
        return TriggerBuilder.newTrigger().forJob(getStockDailyInfoToHDFSJob).startNow().build();
    }

    //计算6日乖离率到HDFS上 任务详情创建 及 触发器创建
    @Bean
    public JobDetail getBiasCalculateToHDFSJob(){
        return JobBuilder.newJob(BiasCalculateToHDFSJob.class).storeDurably().build();
    }
    @Bean
    public Trigger getBiasCalculateToHDFSJobTrigger(JobDetail getBiasCalculateToHDFSJob){
        //1、编写cron表达式，指定触发的时间和周期
        //开发执行： 每个工作日的晚上23点50
        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 50 23 ? * MON-FRI");
        //2、构建触发器，执行任务
        return TriggerBuilder.newTrigger().forJob(getBiasCalculateToHDFSJob).withSchedule(cron).build();

        //测试时才打开，立刻执行一次
//        return TriggerBuilder.newTrigger().forJob(getBiasCalculateToHDFSJob).startNow().build();
    }
}
